# -*- coding: utf-8 -*-
################################################################################
#
# Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved
#
################################################################################
"""
该模块用于读取配置文件。

利用python模块特性构成天然的单例，这样别的模块直接导入config_dict就可以用配置项了

先 from config_load import config_dict

然后直接去用config_dict这个字典即可

注：只对外使用config_dict

Authors: caopeirui(caopeirui@baidu.com)
Date:	2018/04/19 20:10:41
"""
import logging
import log
import configparser
from custom_argparse import custom_args

log.init_log("./log/config_load")

class CrawlConfig():
    def __init__(self, config_file):
        self.config_file = config_file

    def get_config(self):
        """读取配置文件，返回配置项字典。

        Returns:
            配置项字典
            example:
            {'url_list_file': './urls', 
            'output_directory': './output', 
            ……}

        Raises:
            IOError: 如果读取配置文件有问题，使用默认配置，并写入日志。
        """
        # 防止没有读取到配置文件，给个默认配置
        config_content = [
            ('url_list_file', './urls ; 种子文件路径'), 
            ('output_directory', './output ; 抓取结果存储目录'), 
            ('max_depth', '1 ; 最大抓取深度(种子为0级)'), 
            ('crawl_interval', '1 ; 抓取间隔. 单位: 秒'), 
            ('crawl_timeout', '1 ; 抓取超时. 单位: 秒'), 
            ('target_url', '.*.(htm|html)$ ; 需要存储的目标网页URL pattern(正则表达式)'), 
            ('thread_count', '8 ; 抓取线程数')
            ]
        try:
            config = configparser.ConfigParser()
            config.read(self.config_file)
            config_content = config.items('spider')
        except Exception as e:
            logging.warning('读取配置文件有问题，用默认配置：%s' % e)
            print('[WARNING] 读取配置文件有问题，后面的抓取使用默认配置，程序仍继续执行！')

        # 去除读取的配置信息中的所有注释和空白字符
        config_dict = {it[0]:it[1].split(';')[0].strip() for it in config_content}

        return config_dict

_conf_file = custom_args.config
config_dict = CrawlConfig(_conf_file).get_config()


    